{# @copyright   Copyright (C) 2010-2024 Combodo SAS #}
{# @license     http://opensource.org/licenses/AGPL-3.0 #}
{% set sListId = oUIBlock.GetId() %}
{% set sListIDForVarSuffix = ('' ~ sListId)|sanitize(constant('utils::ENUM_SANITIZATION_FILTER_VARIABLE_NAME')) %}
{% if oUIBlock.GetOption("iPageSize") is not empty %}
{% set iPageSize = oUIBlock.GetOption("iPageSize") %}
{% else %}
{% set iPageSize = 10 %}
{% endif %}

var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({
    language: {
        processing: "{{ 'UI:Datatables:Language:Processing'|dict_s }}",
        search: "{{ 'UI:Datatables:Language:Search'|dict_s }}",
        lengthMenu: "{{ 'UI:Datatables:Language:LengthMenu'|dict_s }}",
        zeroRecords: "{{ 'UI:Datatables:Language:ZeroRecords'|dict_s }}",
        info: "{{ 'UI:Datatables:Language:Info'|dict_s }}",
        infoEmpty: "",
        infoFiltered: "({{ 'UI:Datatables:Language:InfoFiltered'|dict_s }})",
        emptyTable: "{{ 'UI:Datatables:Language:EmptyTable'|dict_s }}",
        paginate: {
            first: "<i class=\"fas fa-angle-double-left\"></i>",
            previous: "<i class=\"fas fa-angle-left\"></i>",
            next: "<i class=\"fas fa-angle-right\"></i>",
            last: "<i class=\"fas fa-angle-double-right\"></i>"
        },
        aria: {
            sortAscending: ": {{ 'UI:Datatables:Language:Sort:Ascending'|dict_s }}",
            sortDescending: ": {{ 'UI:Datatables:Language:Sort:Descending'|dict_s }}"
        }
    },
    scrollX: true,
    {% if oUIBlock.GetOption('sMaxHeight') is not empty %}
        scrollY: "{{ oUIBlock.GetOption('sMaxHeight') }}",
    {% endif %}
    scrollCollapse: true,
    order: [],
    rowId: "id",
    filter: false,
    {% if oUIBlock.GetOption("pageLength") is not empty %}
        pageLength: {{ oUIBlock.GetOption("pageLength") }},
    {% endif %}
    {% if oUIBlock.GetOption("dom") is not empty %}
    dom: "<'ibo-datatable--toolbar'{{ oUIBlock.GetOption("dom") }}>t",
    {% else %}
    dom: "<'ibo-datatable--toolbar'<'ibo-datatable--toolbar-left' pl><'ibo-datatable--toolbar-right' i>>t<'ibo-datatable--toolbar'<'ibo-datatable--toolbar-left' pl><'ibo-datatable--toolbar-right' i>>",
    {% endif %}
    lengthMenu: [[ {{ iPageSize }},  {{ iPageSize*2 }},  {{ iPageSize*3 }}, {{ iPageSize*4 }}, -1], [ {{ iPageSize }},  {{ iPageSize*2 }},  {{ iPageSize*3 }}, {{ iPageSize*4 }}, "{{ 'UI:Datatables:Language:DisplayLength:All'|dict_s }}"]],
    columns: [
        {% for key, column in oUIBlock.GetColumns() %}
        {
            data: "{{ key }}",
            width: "auto",
            sortable: true
        },
        {% endfor %}
        {% if oUIBlock.HasRowActions() %}
            getRowActionsColumnDefinition('{{ oUIBlock.GetId() }}'),
        {% endif %}
    ],
    drawCallback: function (settings) {
        if(settings.json)
        {
            $(this).closest('.ibo-panel').find('.ibo-datatable--result-count').html(settings.json.recordsTotal);
        }
        // Hiding pagination if only one page
        if ($(this).closest('.dataTables_wrapper').find('.dataTables_paginate:last .paginate_button:not(.previous):not(.next)').length < 2)
        {
            $(this).closest('.dataTables_wrapper').find('.dataTables_paginate, .dataTables_info').hide();
        }
        else
        {
            $(this).closest('.dataTables_wrapper').find('.dataTables_paginate, .dataTables_info').show();
        }
        if ($(this).closest('.ibo-panel--body').find('[name=selectionMode]').val() === "negative")
        {
            $(this).closest('.dataTables_wrapper').find('.checkAll')[0].checked = true;
        }
        
        // Disable hyperlinks if necessary
        {% if oUIBlock.GetOption("disable_hyperlinks") is same as true or (oUIBlock.GetOption("select_mode") is not empty and oUIBlock.GetOption("disable_hyperlinks") is not same as false) %}
        $("#{{ oUIBlock.GetId() }} a").on('click', function (e) {
            e.preventDefault();
        });
        {% endif %}
    },
    initComplete: function () {
        if (this.api().page.info().pages < 2)
        {
            this.closest('.dataTables_wrapper').find('.dataTables_length').hide();
        }
        
        // Set header and body datatables status as loaded
        this.attr('data-status', 'loaded');
        this.closest('.dataTables_scroll').find('.dataTables_scrollHead .ibo-datatable').attr('data-status', 'loaded');
    }
});

if (window.ResizeObserver)
{
    let oStaticTable{{ sListIDForVarSuffix }}ResizeTimeout = null;
    const oStaticTable{{ sListIDForVarSuffix }}Resize = new ResizeObserver(function(){
        clearTimeout(oStaticTable{{ sListIDForVarSuffix }}ResizeTimeout);
        oStaticTable{{ sListIDForVarSuffix }}ResizeTimeout = setTimeout(function(){
            $('#{{ oUIBlock.GetId() }}').DataTable().columns.adjust();
        }, 120);
    });
    oStaticTable{{ sListIDForVarSuffix }}Resize.observe($('#{{ oUIBlock.GetId() }}')[0]);
}

{% include 'base/components/datatable/row-actions/handler.js.twig' %}